#include"public.h"

volatile   union ui_buff_ ui_buff[3];
s8 ui_id=6;
const u8 nixienum[10]=
{
    0x3f,
    0x06,
    0x5b,
    0x4f,
    0x66,
    0x6d,
    0x7d,
    0x07,
    0x7f,
    0x6f
};

volatile ui_ ui={
    0,0,0,0,0,
    0
    };

ui__ ui_ld={
    20,20,20
    };
volatile tim_ui_ tim_ui={0};

void new_nixie(void)
{
    if(ui.num1<10)//0
    {
        ui_buff[0].buf=nixienum[ui.num1];
        // if((ui.num1==1)&&(ui.num2==6))
        // {
        //     ui_buff[0].buf=0x30;
        // }
    }
    else
    {
        ui_buff[0].buf=0;
    }

    if(ui.num2<10)//1
    {
        ui_buff[1].buf=nixienum[ui.num2];
        ui_buff[2].b=1;
    }
    else
    {
        ui_buff[1].buf=0;
        ui_buff[2].b=0;
    }
    ui_buff[1].d_=ui.one;

    ui_buff[2].a=ui.dian;//2
    ui_buff[2].c=ui.you;
    ui_buff[2].d=ui_buff[2].a_=ui.w;

}
void ldz(u8 a)
{
    ui_ld.w     =a;
    ui_ld.n 	=a;
    ui_ld.z     =a;
}

// // //50ms 53
// void ui_cb(task* task_)
// {
//     if(task_->sucCnt<=21)
//     {
//         if(task_->sucCnt==0)
//         {
//             ui.w	    =0;
//             ui.u	    =0;
//             ui.q        =10;

//             ui.ou_d	    =1;
//             ui.wa	    =0;
//             ui.ts	    =ts;
//             ui.you	    =you;
//             ui.cnt      =0;
//             ui.dian	    =0;
//             ldz(10);
//         }
//         if((task_->sucCnt&1)==0)
//         {
//             if(zz)
//             {
//                 ui.num1	    =zz/100;
//                 ui.num2	    =(zz/10)%10;
                
//             }
//             else
//             {
//                 ui.num1     =0;
//                 ui.num2     =0;
//             }
//             new_nixie();
//         }
//     }
//     else if(task_->sucCnt<=42)
//     {
//         if(task_->sucCnt==22)
//         {
//             ui.ou_d	    =0;
//             ui.wa	    =1;
//         }
//         if((task_->sucCnt&1)==0)
//         {
//             ui.num1	    =pw/10;
//             ui.num2	    =pw-ui.num1*10;
//             new_nixie();
//         }
//     }
//     else
//     {
//         if(task_->sucCnt&1)
//         {
//             ui.num1	    =pw/10;
//             ui.num2	    =pw-ui.num1*10;
//             ui.dian	    =0;
//             new_nixie();
//         }
//         ldz(52-task_->sucCnt);
//     }
//     if(task_->sucCnt==52)
//     {
//         if(USB_DET&&(CHRG_FULL==0))
//         {
//             add_task_id(ui_chrg_id,ui_chrg_ms,ui_chrg_max,ui_id);
//         }
//     }
// }

//50ms 0
void ui_chrg(task* task_)
{
    if(task_->sucCnt==0)
    {
        ui.w	    =0	    ;//
        // ui.num1    =		;//
        // ui.num2    =		;//
        
        ui.you	    =0	    ;//
        ui.dian    =1		;
        ui_ld.w=ui_ldmax;
        ui_ld.z=0;
    }
    if((task_->sucCnt&1)==0)
    {
        if(bat.dian>=100)
        {
            ui.num1	    =(bat.dian-100)/10;
            ui.num2	    =(bat.dian-100)-(ui.num1*10);
            ui.one	    =1;
        }
        else
        {
            ui.num1	    =(bat.dian)/10;
            ui.num2	    =(bat.dian)-(ui.num1*10);
            ui.one	    =0;
        }
        new_nixie();
    }
    if(task_->sucCnt<=14)
    {
        ui_ld.n=task_->sucCnt+1;
    }
    else
    {
        ui_ld.n=29-task_->sucCnt;
    }
    task_->sucCnt++;
    if(task_->sucCnt>=30)
    {
        task_->sucCnt=0;
    }
}

//3000ms 2
void ui_chrgfree(task* task_)
{
    if(task_->sucCnt==0)
    {
        ui.w	    =1	    ;//
        ui.num1     =8		;//
        ui.num2     =8		;//
        ui.one	    =1      ;
        ui.you	    =1	    ;//
        ui.dian     =1		;
        ldz(ui_ldmax);
        new_nixie();
    }
    else
    {
        ldz(0);
    }
}

//500   0
void ui_chrgfull(task* task_)
{
    if(task_->sucCnt==0)
    {
        ui.w	    =0	    ;//
        // if(bat.dian>=100)
        // {
        //     ui.num1	    =(bat.dian-100)/10;
        //     ui.num2	    =(bat.dian-100)-(ui.num1*10);
        //     ui.one	    =1;
        // }
        // else
        // {
        //     ui.num1	    =(bat.dian)/10;
        //     ui.num2	    =(bat.dian)-(ui.num1*10);
        //     ui.one	    =0;
        // }
        ui.num1	    =10;
        ui.num2	    =10;
        ui.one	    =0;
        ui.you	    =0	    ;//
        ui.dian     =1		;
        ui_ld.w=0;
        ui_ld.n=ui_ldmax;
        ui_ld.z=0;
        new_nixie();
    }
    task_->sucCnt=1;
}

//25ms 0
void ui_smoing(task* task_)
{
    if(task_->sucCnt==0)
    {
        ui.w	    =1;
            
        ui.you	    =1;
        ui.dian     =0;

        ui_ld.n=0;
        ui_ld.w=ui_ldmax;

        
    }
    if(task_->sucCnt<=29)
    {
        ui_ld.z=task_->sucCnt+1;
    }
    else
    {
        ui_ld.z=59-task_->sucCnt;
    }
    if(ui_ld.z){ui_ld.z=ui_ld.z+((ui_ld.z-1)/3+2);}else{ui_ld.z=1;}
    
    if((task_->sucCnt&2)==0)
    {
        if(you>=100)
        {
            ui.num1	    =(you-100)/10;
            ui.num2	    =(you-100)-(ui.num1*10);
            ui.one	    =1;
        }
        else
        {
            ui.num1	    =(you)/10;
            ui.num2	    =(you)-(ui.num1*10);
            ui.one	    =0;
        }
        new_nixie();
    }

    task_->sucCnt++;
    if(task_->sucCnt>=60)
    {
        task_->sucCnt=0;
    }
}

// //500ms 6
// void ui_dl(task* task_)
// {
//     if(task_->sucCnt==0)
//     {
//         ui.w	    =0;
            
//         ui.you	    =0;
//         ui.dian     =1;

//         ldz(10);
//         ui_ld.z=0;
//     }
    
//     if((task_->sucCnt&1)==0)
//     {
//         ui.num1	    =(bat.dian-100)/10;
//         ui.num2	    =(bat.dian-100)-(ui.num1*10);
//         ui.one	    =(bat.dian>=100)?1:0;
//         new_nixie();
//     }
//     else
//     {
//         ldz(0);
//     }
//     // if(task_->sucCnt==72)
//     // {
//     //     if(USB_DET&&(CHRG_FULL==0))
//     //     {
//     //         add_task_id(ui_chrg_id,ui_chrg_ms,ui_chrg_max,ui_id);
//     //     }
//     // }
// }

//50ms 115
void ui_smoend(task* task_)
{
    if(task_->sucCnt<=51)
    {
        if(task_->sucCnt==0)
        {
            ui.w	    =1;
            
            ui.you	    =1;
            ui.dian     =0;

            ldz(ui_ldmax);
        }

    }
    else if(task_->sucCnt<=103)
    {
        if(task_->sucCnt==52)
        {
            ui.w	    =1;
            
            ui.you	    =0;
            ui.dian     =1;

            ldz(ui_ldmax);
        }
    }
    else
    {
        ldz(114-task_->sucCnt);
    }
    if((task_->sucCnt&1)==0)
    {
        if(task_->sucCnt>51)
        {
            if(bat.dian>=100)
            {
                ui.num1	    =(bat.dian-100)/10;
                ui.num2	    =(bat.dian-100)-(ui.num1*10);
                ui.one	    =1;
            }
            else
            {
                ui.num1	    =(bat.dian)/10;
                ui.num2	    =(bat.dian)-(ui.num1*10);
                ui.one	    =0;
            }
        }
        else
        {
            if(you>=100)
            {
                ui.num1	    =(you-100)/10;
                ui.num2	    =(you-100)-(ui.num1*10);
                ui.one	    =1;
            }
            else
            {
                ui.num1	    =(you)/10;
                ui.num2	    =(you)-(ui.num1*10);
                ui.one	    =0;
            }
        }
    }
    new_nixie();
}

//250ms 11
void ui_kl(task* task_)
{
    if((task_->sucCnt&1)==0)
    {
        ldz(0);
    }
    else
    {
        ui.w	    =1;
            
        ui.you	    =0;
        ui.dian     =1;

        ldz(ui_ldmax);
        if(bat.dian>=100)
        {
            ui.num1	    =(bat.dian-100)/10;
            ui.num2	    =(bat.dian-100)-(ui.num1*10);
            ui.one	    =1;
        }
        else
        {
            ui.num1	    =(bat.dian)/10;
            ui.num2	    =(bat.dian)-(ui.num1*10);
            ui.one	    =0;
        }
        new_nixie();
    }
}

// //50ms 100
// void ui_ts_on(task* task_)
// {
//     if(task_->sucCnt<=9)
//     {
//         if(task_->sucCnt==0)
//         {
//             ui.w	    =1;
//             ui.u	    =1;
//             ui.q	    =10;
                
//             ui.ou_d	    =0;
//             ui.wa	    =1;
//             ui.ts	    =1;
//             ui.you	    =you;
//             // ui.dian     =bat.dian;
//             ui.cnt      =0;
//             ldz(0);

//             // ui.num1	    =10;
//             // ui.num2	    =10;
//         }
//         ldz(task_->sucCnt+1);
//     }
//     else if(task_->sucCnt<=30)
//     {
//         //ldz(19-task_->sucCnt);
//         //ui_ld.ts=10;
//     }
//     else if(task_->sucCnt<=40)
//     {
//         ldz(40-task_->sucCnt);
//         ui_ld.ts=10;
//     }
//     else
//     {
//         if(task_->sucCnt==99)
//         {
//             ui_ld.ts=0;
//         }
//     }
//     if(((task_->sucCnt&1)==0)&&task_->sucCnt<40)
//     {
//         ui.num1	    =pw/10;
//         ui.num2	    =pw-ui.num1*10;
//         ui.dian	    =bat.dian;
//     }
//     new_nixie();
//     if(task_->sucCnt==99)
//     {
//         if(USB_DET&&(CHRG_FULL==0))
//         {
//             add_task_id(ui_chrg_id,ui_chrg_ms,ui_chrg_max,ui_id);
//         }
//     }
// }

// //50ms 43
// void ui_ts_off(task* task_)
// {
//     if(task_->sucCnt<=9)
//     {
//         if(task_->sucCnt==0)
//         {
//             ui.w	    =1;
//             ui.u	    =1;
//             ui.q	    =10;
                
//             ui.ou_d	    =0;
//             ui.wa	    =1;
//             ui.ts	    =0;
//             ui.you	    =you;
//             // ui.dian     =bat.dian;
//             ui.cnt      =0;
//             ldz(0);

//             // ui.num1	    =10;
//             // ui.num2	    =10;
//         }
//         ldz(task_->sucCnt+1);
//     }
//     else
//     {
//         if(task_->sucCnt==42)
//         {
//             ldz(0);
//         }
//     }
//     if((task_->sucCnt&1)==0)
//     {
//         ui.num1	    =pw/10;
//         ui.num2	    =pw-ui.num1*10;
//         ui.dian	    =bat.dian;
//     }
//     new_nixie();
//     if(task_->sucCnt==42)
//     {
//         if(USB_DET&&(CHRG_FULL==0))
//         {
//             add_task_id(ui_chrg_id,ui_chrg_ms,ui_chrg_max,ui_id);
//         }
//     }
// }

//250ms 11
void ui_timout_dl(task* task_)
{
    if((task_->sucCnt&1)==0)
    {
        ldz(0);
    }
    else
    {
        ui.w	    =0;
            
        ui.you	    =0;
        ui.dian     =1;

        ldz(ui_ldmax);
        ui_ld.z=0;

        if(bat.dian>=100)
        {
            ui.num1	    =(bat.dian-100)/10;
            ui.num2	    =(bat.dian-100)-(ui.num1*10);
            ui.one	    =1;
        }
        else
        {
            ui.num1	    =(bat.dian)/10;
            ui.num2	    =(bat.dian)-(ui.num1*10);
            ui.one	    =0;
        }
        new_nixie();
    }
    
}

//2000ms  2
void ui_begin(task* task_)
{
    if(task_->sucCnt==0)
    {
        ui.w	    =1;
            
        ui.you	    =1;
        ui.dian     =1;

        ldz(ui_ldmax);

        ui.num1	    =8;
        ui.num2	    =8;
        ui.one	    =1;

        new_nixie();
    }
    else
    {
        ldz(0);

    }
    // else
    // {
    //     #if bug
    //     uart_txln("sleep");
    //     #endif
    //     cb_init();
    //     sleep_mode();
    //     NOP();
    //     gpio_init();
    //     timer0_init();
    //     __delay_us(30);
    //     timer1_init();
    //     timer2_init();
    //     cmp0_init();
    //     #if bug
    //     uart_init();
    //     #endif
    //     __delay_ms(20);
    // }
}

//250ms 6 or 20
void ui_dz_lowbat(task* task_)
{
    if((task_->sucCnt&1)==0)
    {
        ldz(0);
    }
    else
    {
        ui.w	    =0;
            
        ui.you	    =0;
        ui.dian     =1;

        ldz(ui_ldmax);
        ui_ld.z=0;

        ui.num1	    =10;
        ui.num2	    =10;
        ui.one	    =0;
        new_nixie();
    }
}

// void ui_lowbat(task* task_)
// {


// }